{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Uncomment and run this cell if you're on Colab or Kaggle\n",
    "# !git clone https://github.com/nlp-with-transformers/notebooks.git\n",
    "# %cd notebooks\n",
    "# from install import *\n",
    "# install_requirements(is_chapter6=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using transformers v4.12.0.dev0\n",
      "Using datasets v1.12.1\n",
      "Using accelerate v0.5.1\n"
     ]
    }
   ],
   "source": [
    "#hide\n",
    "from utils import *\n",
    "setup_chapter()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2021-10-26 08:42:19.435660: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n",
      "2021-10-26 08:42:19.435693: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n"
     ]
    }
   ],
   "source": [
    "# hide\n",
    "from transformers import pipeline, set_seed"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Summarization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The CNN/DailyMail Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "437ab47eb9f7412680333b25ff8276b3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/3 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Split lengths: [275349, 12148, 10397]\n",
      "Features: ['article', 'highlights', 'id']\n"
     ]
    }
   ],
   "source": [
    "#hide_output\n",
    "from datasets import load_dataset\n",
    "\n",
    "dataset = load_dataset(\"cnn_dailymail\", version=\"3.0.0\")\n",
    "print(f\"Features: {dataset['train'].column_names}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Article (excerpt of 500 characters, total length: 3192):\n",
      "\n",
      "(CNN) -- Usain Bolt rounded off the world championships Sunday by claiming his\n",
      "third gold in Moscow as he anchored Jamaica to victory in the men's 4x100m\n",
      "relay. The fastest man in the world charged clear of United States rival Justin\n",
      "Gatlin as the Jamaican quartet of Nesta Carter, Kemar Bailey-Cole, Nickel\n",
      "Ashmeade and Bolt won in 37.36 seconds. The U.S finished second in 37.56 seconds\n",
      "with Canada taking the bronze after Britain were disqualified for a faulty\n",
      "handover. The 26-year-old Bolt has n\n",
      "\n",
      "Summary (length: 180):\n",
      "Usain Bolt wins third gold of world championship .\n",
      "Anchors Jamaica to 4x100m relay victory .\n",
      "Eighth gold at the championships for Bolt .\n",
      "Jamaica double up in women's 4x100m relay .\n"
     ]
    }
   ],
   "source": [
    "sample = dataset[\"train\"][1]\n",
    "print(f\"\"\"\n",
    "Article (excerpt of 500 characters, total length: {len(sample[\"article\"])}):\n",
    "\"\"\")\n",
    "print(sample[\"article\"][:500])\n",
    "print(f'\\nSummary (length: {len(sample[\"highlights\"])}):')\n",
    "print(sample[\"highlights\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Text Summarization Pipelines"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sample_text = dataset[\"train\"][1][\"article\"][:2000]\n",
    "# We'll collect the generated summaries of each model in a dictionary\n",
    "summaries = {}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[nltk_data] Downloading package punkt to /home/leandro/nltk_data...\n",
      "[nltk_data]   Package punkt is already up-to-date!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#hide_output\n",
    "import nltk\n",
    "from nltk.tokenize import sent_tokenize\n",
    "\n",
    "nltk.download(\"punkt\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['The U.S. are a country.', 'The U.N. is an organization.']"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "string = \"The U.S. are a country. The U.N. is an organization.\"\n",
    "sent_tokenize(string)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Summarization Baseline\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def three_sentence_summary(text):\n",
    "    return \"\\n\".join(sent_tokenize(text)[:3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "summaries[\"baseline\"] = three_sentence_summary(sample_text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### GPT-2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#hide_output\n",
    "from transformers import pipeline, set_seed\n",
    "\n",
    "set_seed(42)\n",
    "pipe = pipeline(\"text-generation\", model=\"gpt2-xl\")\n",
    "gpt2_query = sample_text + \"\\nTL;DR:\\n\"\n",
    "pipe_out = pipe(gpt2_query, max_length=512, clean_up_tokenization_spaces=True)\n",
    "summaries[\"gpt2\"] = \"\\n\".join(\n",
    "    sent_tokenize(pipe_out[0][\"generated_text\"][len(gpt2_query) :]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### T5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img alt=\"T5\" width=\"700\" caption=\"Diagram of T5's text-to-text framework (courtesy of Colin Raffel); besides translation and summarization, the CoLA (linguistic acceptability) and STSB (semantic similarity) tasks are shown\" src=\"images/chapter08_t5.png\" id=\"T5\"/>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#hide_output\n",
    "pipe = pipeline(\"summarization\", model=\"t5-large\")\n",
    "pipe_out = pipe(sample_text)\n",
    "summaries[\"t5\"] = \"\\n\".join(sent_tokenize(pipe_out[0][\"summary_text\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### BART"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#hide_output\n",
    "pipe = pipeline(\"summarization\", model=\"facebook/bart-large-cnn\")\n",
    "pipe_out = pipe(sample_text)\n",
    "summaries[\"bart\"] = \"\\n\".join(sent_tokenize(pipe_out[0][\"summary_text\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PEGASUS"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img alt=\"pegasus\" width=\"700\" caption=\"Diagram of PEGASUS architecture (courtesy of Jingqing Zhang et al.)\" src=\"images/chapter08_pegasus.png\" id=\"pegasus\"/>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#hide_output\n",
    "pipe = pipeline(\"summarization\", model=\"google/pegasus-cnn_dailymail\")\n",
    "pipe_out = pipe(sample_text)\n",
    "summaries[\"pegasus\"] = pipe_out[0][\"summary_text\"].replace(\" .<n>\", \".\\n\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Comparing Different Summaries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GROUND TRUTH\n",
      "Usain Bolt wins third gold of world championship .\n",
      "Anchors Jamaica to 4x100m relay victory .\n",
      "Eighth gold at the championships for Bolt .\n",
      "Jamaica double up in women's 4x100m relay .\n",
      "\n",
      "BASELINE\n",
      "(CNN) -- Usain Bolt rounded off the world championships Sunday by claiming his\n",
      "third gold in Moscow as he anchored Jamaica to victory in the men's 4x100m\n",
      "relay.\n",
      "The fastest man in the world charged clear of United States rival Justin Gatlin\n",
      "as the Jamaican quartet of Nesta Carter, Kemar Bailey-Cole, Nickel Ashmeade and\n",
      "Bolt won in 37.36 seconds.\n",
      "The U.S finished second in 37.56 seconds with Canada taking the bronze after\n",
      "Britain were disqualified for a faulty handover.\n",
      "\n",
      "GPT2\n",
      "Nesta, the fastest man in the world.\n",
      "Gatlin, the most successful Olympian ever.\n",
      "Kemar, a Jamaican legend.\n",
      "Shelly-Ann, the fastest woman ever.\n",
      "Bolt, the world's greatest athlete.\n",
      "The team sport of pole vaulting\n",
      "\n",
      "T5\n",
      "usain bolt wins his third gold medal of the world championships in the men's\n",
      "4x100m relay .\n",
      "the 26-year-old anchored Jamaica to victory in the event in the Russian capital\n",
      ".\n",
      "he has now collected eight gold medals at the championships, equaling the record\n",
      ".\n",
      "\n",
      "BART\n",
      "Usain Bolt wins his third gold of the world championships in Moscow.\n",
      "Bolt anchors Jamaica to victory in the men's 4x100m relay.\n",
      "The 26-year-old has now won eight gold medals at world championships.\n",
      "Jamaica's women also win gold in the relay, beating France in the process.\n",
      "\n",
      "PEGASUS\n",
      "Usain Bolt wins third gold of world championships.\n",
      "Anchors Jamaica to victory in men's 4x100m relay.\n",
      "Eighth gold at the championships for Bolt.\n",
      "Jamaica also win women's 4x100m relay .\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(\"GROUND TRUTH\")\n",
    "print(dataset[\"train\"][1][\"highlights\"])\n",
    "print(\"\")\n",
    "\n",
    "for model_name in summaries:\n",
    "    print(model_name.upper())\n",
    "    print(summaries[model_name])\n",
    "    print(\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Measuring the Quality of Generated Text"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### BLEU"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# hide_output\n",
    "from datasets import load_metric\n",
    "\n",
    "bleu_metric = load_metric(\"sacrebleu\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>score</th>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>counts</th>\n",
       "      <td>[2, 0, 0, 0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>totals</th>\n",
       "      <td>[6, 5, 4, 3]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>precisions</th>\n",
       "      <td>[33.33, 0.0, 0.0, 0.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>bp</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sys_len</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ref_len</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             Value\n",
       "score                          0.0\n",
       "counts                [2, 0, 0, 0]\n",
       "totals                [6, 5, 4, 3]\n",
       "precisions  [33.33, 0.0, 0.0, 0.0]\n",
       "bp                             1.0\n",
       "sys_len                          6\n",
       "ref_len                          6"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "bleu_metric.add(\n",
    "    prediction=\"the the the the the the\", reference=[\"the cat is on the mat\"])\n",
    "results = bleu_metric.compute(smooth_method=\"floor\", smooth_value=0)\n",
    "results[\"precisions\"] = [np.round(p, 2) for p in results[\"precisions\"]]\n",
    "pd.DataFrame.from_dict(results, orient=\"index\", columns=[\"Value\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>score</th>\n",
       "      <td>57.893007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>counts</th>\n",
       "      <td>[5, 3, 2, 1]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>totals</th>\n",
       "      <td>[5, 4, 3, 2]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>precisions</th>\n",
       "      <td>[100.0, 75.0, 66.67, 50.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>bp</th>\n",
       "      <td>0.818731</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sys_len</th>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ref_len</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                 Value\n",
       "score                        57.893007\n",
       "counts                    [5, 3, 2, 1]\n",
       "totals                    [5, 4, 3, 2]\n",
       "precisions  [100.0, 75.0, 66.67, 50.0]\n",
       "bp                            0.818731\n",
       "sys_len                              5\n",
       "ref_len                              6"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bleu_metric.add(\n",
    "    prediction=\"the cat is on mat\", reference=[\"the cat is on the mat\"])\n",
    "results = bleu_metric.compute(smooth_method=\"floor\", smooth_value=0)\n",
    "results[\"precisions\"] = [np.round(p, 2) for p in results[\"precisions\"]]\n",
    "pd.DataFrame.from_dict(results, orient=\"index\", columns=[\"Value\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ROUGE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# hide_output\n",
    "rouge_metric = load_metric(\"rouge\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rouge1</th>\n",
       "      <th>rouge2</th>\n",
       "      <th>rougeL</th>\n",
       "      <th>rougeLsum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>baseline</th>\n",
       "      <td>0.303571</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.214286</td>\n",
       "      <td>0.232143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>gpt2</th>\n",
       "      <td>0.187500</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.125000</td>\n",
       "      <td>0.187500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t5</th>\n",
       "      <td>0.486486</td>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.378378</td>\n",
       "      <td>0.486486</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>bart</th>\n",
       "      <td>0.582278</td>\n",
       "      <td>0.207792</td>\n",
       "      <td>0.455696</td>\n",
       "      <td>0.506329</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pegasus</th>\n",
       "      <td>0.866667</td>\n",
       "      <td>0.655172</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>0.833333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            rouge1    rouge2    rougeL  rougeLsum\n",
       "baseline  0.303571  0.090909  0.214286   0.232143\n",
       "gpt2      0.187500  0.000000  0.125000   0.187500\n",
       "t5        0.486486  0.222222  0.378378   0.486486\n",
       "bart      0.582278  0.207792  0.455696   0.506329\n",
       "pegasus   0.866667  0.655172  0.800000   0.833333"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reference = dataset[\"train\"][1][\"highlights\"]\n",
    "records = []\n",
    "rouge_names = [\"rouge1\", \"rouge2\", \"rougeL\", \"rougeLsum\"]\n",
    "\n",
    "for model_name in summaries:\n",
    "    rouge_metric.add(prediction=summaries[model_name], reference=reference)\n",
    "    score = rouge_metric.compute()\n",
    "    rouge_dict = dict((rn, score[rn].mid.fmeasure) for rn in rouge_names)\n",
    "    records.append(rouge_dict)\n",
    "pd.DataFrame.from_records(records, index=summaries.keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluating PEGASUS on the CNN/DailyMail Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "da745498cb9f4dd7b7dbdfed92bb61b2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/3 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# hide\n",
    "# ignore this cell it is only to be able to start running the notebook here\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "from datasets import load_dataset, load_metric\n",
    "from transformers import AutoModelForSeq2SeqLM, AutoTokenizer\n",
    "\n",
    "dataset = load_dataset(\"cnn_dailymail\", version=\"3.0.0\")\n",
    "rouge_metric = load_metric(\"rouge\", cache_dir=None)\n",
    "rouge_names = [\"rouge1\", \"rouge2\", \"rougeL\", \"rougeLsum\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_summaries_baseline(dataset, metric,\n",
    "                                column_text=\"article\", \n",
    "                                column_summary=\"highlights\"):\n",
    "    summaries = [three_sentence_summary(text) for text in dataset[column_text]]\n",
    "    metric.add_batch(predictions=summaries,\n",
    "                     references=dataset[column_summary])    \n",
    "    score = metric.compute()\n",
    "    return score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rouge1</th>\n",
       "      <th>rouge2</th>\n",
       "      <th>rougeL</th>\n",
       "      <th>rougeLsum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>baseline</th>\n",
       "      <td>0.396061</td>\n",
       "      <td>0.173995</td>\n",
       "      <td>0.245815</td>\n",
       "      <td>0.361158</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            rouge1    rouge2    rougeL  rougeLsum\n",
       "baseline  0.396061  0.173995  0.245815   0.361158"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_sampled = dataset[\"test\"].shuffle(seed=42).select(range(1000))\n",
    "\n",
    "score = evaluate_summaries_baseline(test_sampled, rouge_metric)\n",
    "rouge_dict = dict((rn, score[rn].mid.fmeasure) for rn in rouge_names)\n",
    "pd.DataFrame.from_dict(rouge_dict, orient=\"index\", columns=[\"baseline\"]).T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from tqdm import tqdm\n",
    "import torch\n",
    "\n",
    "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
    "\n",
    "def chunks(list_of_elements, batch_size):\n",
    "    \"\"\"Yield successive batch-sized chunks from list_of_elements.\"\"\"\n",
    "    for i in range(0, len(list_of_elements), batch_size):\n",
    "        yield list_of_elements[i : i + batch_size]\n",
    "\n",
    "def evaluate_summaries_pegasus(dataset, metric, model, tokenizer, \n",
    "                               batch_size=16, device=device, \n",
    "                               column_text=\"article\", \n",
    "                               column_summary=\"highlights\"):\n",
    "    article_batches = list(chunks(dataset[column_text], batch_size))\n",
    "    target_batches = list(chunks(dataset[column_summary], batch_size))\n",
    "\n",
    "    for article_batch, target_batch in tqdm(\n",
    "        zip(article_batches, target_batches), total=len(article_batches)):\n",
    "        \n",
    "        inputs = tokenizer(article_batch, max_length=1024,  truncation=True, \n",
    "                        padding=\"max_length\", return_tensors=\"pt\")\n",
    "        \n",
    "        summaries = model.generate(input_ids=inputs[\"input_ids\"].to(device),\n",
    "                         attention_mask=inputs[\"attention_mask\"].to(device), \n",
    "                         length_penalty=0.8, num_beams=8, max_length=128)\n",
    "        \n",
    "        decoded_summaries = [tokenizer.decode(s, skip_special_tokens=True, \n",
    "                                clean_up_tokenization_spaces=True) \n",
    "               for s in summaries]\n",
    "        decoded_summaries = [d.replace(\"<n>\", \" \") for d in decoded_summaries]\n",
    "        metric.add_batch(predictions=decoded_summaries, references=target_batch)\n",
    "        \n",
    "    score = metric.compute()\n",
    "    return score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████| 125/125 [10:39<00:00,  5.11s/it]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rouge1</th>\n",
       "      <th>rouge2</th>\n",
       "      <th>rougeL</th>\n",
       "      <th>rougeLsum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>pegasus</th>\n",
       "      <td>0.434381</td>\n",
       "      <td>0.210883</td>\n",
       "      <td>0.307195</td>\n",
       "      <td>0.373231</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           rouge1    rouge2    rougeL  rougeLsum\n",
       "pegasus  0.434381  0.210883  0.307195   0.373231"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# hide_output\n",
    "from transformers import AutoModelForSeq2SeqLM, AutoTokenizer\n",
    "\n",
    "model_ckpt = \"google/pegasus-cnn_dailymail\"\n",
    "tokenizer = AutoTokenizer.from_pretrained(model_ckpt)\n",
    "model = AutoModelForSeq2SeqLM.from_pretrained(model_ckpt).to(device)\n",
    "score = evaluate_summaries_pegasus(test_sampled, rouge_metric, \n",
    "                                   model, tokenizer, batch_size=8)\n",
    "rouge_dict = dict((rn, score[rn].mid.fmeasure) for rn in rouge_names)\n",
    "pd.DataFrame(rouge_dict, index=[\"pegasus\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rouge1</th>\n",
       "      <th>rouge2</th>\n",
       "      <th>rougeL</th>\n",
       "      <th>rougeLsum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>pegasus</th>\n",
       "      <td>0.434381</td>\n",
       "      <td>0.210883</td>\n",
       "      <td>0.307195</td>\n",
       "      <td>0.373231</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           rouge1    rouge2    rougeL  rougeLsum\n",
       "pegasus  0.434381  0.210883  0.307195   0.373231"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# hide_input \n",
    "pd.DataFrame(rouge_dict, index=[\"pegasus\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training a Summarization Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# hide_output\n",
    "dataset_samsum = load_dataset(\"samsum\")\n",
    "split_lengths = [len(dataset_samsum[split])for split in dataset_samsum]\n",
    "\n",
    "print(f\"Split lengths: {split_lengths}\")\n",
    "print(f\"Features: {dataset_samsum['train'].column_names}\")\n",
    "print(\"\\nDialogue:\")\n",
    "print(dataset_samsum[\"test\"][0][\"dialogue\"])\n",
    "print(\"\\nSummary:\")\n",
    "print(dataset_samsum[\"test\"][0][\"summary\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Split lengths: [14732, 819, 818]\n",
      "Features: ['id', 'dialogue', 'summary']\n",
      "\n",
      "Dialogue:\n",
      "Hannah: Hey, do you have Betty's number?\n",
      "Amanda: Lemme check\n",
      "Hannah: <file_gif>\n",
      "Amanda: Sorry, can't find it.\n",
      "Amanda: Ask Larry\n",
      "Amanda: He called her last time we were at the park together\n",
      "Hannah: I don't know him well\n",
      "Hannah: <file_gif>\n",
      "Amanda: Don't be shy, he's very nice\n",
      "Hannah: If you say so..\n",
      "Hannah: I'd rather you texted him\n",
      "Amanda: Just text him 🙂\n",
      "Hannah: Urgh.. Alright\n",
      "Hannah: Bye\n",
      "Amanda: Bye bye\n",
      "\n",
      "Summary:\n",
      "Hannah needs Betty's number but Amanda doesn't have it. She needs to contact\n",
      "Larry.\n"
     ]
    }
   ],
   "source": [
    "# hide_input\n",
    "print(f\"Split lengths: {split_lengths}\")\n",
    "print(f\"Features: {dataset_samsum['train'].column_names}\")\n",
    "print(\"\\nDialogue:\")\n",
    "print(dataset_samsum[\"test\"][0][\"dialogue\"])\n",
    "print(\"\\nSummary:\")\n",
    "print(dataset_samsum[\"test\"][0][\"summary\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Evaluating PEGASUS on SAMSum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Summary:\n",
      "Amanda: Ask Larry Amanda: He called her last time we were at the park together.\n",
      "Hannah: I'd rather you texted him.\n",
      "Amanda: Just text him .\n"
     ]
    }
   ],
   "source": [
    "pipe_out = pipe(dataset_samsum[\"test\"][0][\"dialogue\"])\n",
    "print(\"Summary:\")\n",
    "print(pipe_out[0][\"summary_text\"].replace(\" .<n>\", \".\\n\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████| 103/103 [07:48<00:00,  4.55s/it]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rouge1</th>\n",
       "      <th>rouge2</th>\n",
       "      <th>rougeL</th>\n",
       "      <th>rougeLsum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>pegasus</th>\n",
       "      <td>0.296168</td>\n",
       "      <td>0.087803</td>\n",
       "      <td>0.229604</td>\n",
       "      <td>0.229514</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           rouge1    rouge2    rougeL  rougeLsum\n",
       "pegasus  0.296168  0.087803  0.229604   0.229514"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# hide_output\n",
    "score = evaluate_summaries_pegasus(dataset_samsum[\"test\"], rouge_metric, model,\n",
    "                                   tokenizer, column_text=\"dialogue\",\n",
    "                                   column_summary=\"summary\", batch_size=8)\n",
    "\n",
    "rouge_dict = dict((rn, score[rn].mid.fmeasure) for rn in rouge_names)\n",
    "pd.DataFrame(rouge_dict, index=[\"pegasus\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rouge1</th>\n",
       "      <th>rouge2</th>\n",
       "      <th>rougeL</th>\n",
       "      <th>rougeLsum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>pegasus</th>\n",
       "      <td>0.296168</td>\n",
       "      <td>0.087803</td>\n",
       "      <td>0.229604</td>\n",
       "      <td>0.229514</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           rouge1    rouge2    rougeL  rougeLsum\n",
       "pegasus  0.296168  0.087803  0.229604   0.229514"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# hide_input\n",
    "pd.DataFrame(rouge_dict, index=[\"pegasus\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Fine-Tuning PEGASUS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/pdf": "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dHJlYW0KZW5kb2JqCjE0IDAgb2JqCjw8IC9CYXNlRm9udCAvR3VhcmRpYW5TYW5zQ29uZC1SZWd1bGFyCi9DSURTeXN0ZW1JbmZvIDw8IC9PcmRlcmluZyAoSWRlbnRpdHkpIC9SZWdpc3RyeSAoQWRvYmUpIC9TdXBwbGVtZW50IDAgPj4KL0NJRFRvR0lETWFwIDE2IDAgUiAvRm9udERlc2NyaXB0b3IgMTMgMCBSIC9TdWJ0eXBlIC9DSURGb250VHlwZTIKL1R5cGUgL0ZvbnQgL1cgMTggMCBSID4+CmVuZG9iagoxNSAwIG9iago8PCAvQmFzZUZvbnQgL0d1YXJkaWFuU2Fuc0NvbmQtUmVndWxhciAvRGVzY2VuZGFudEZvbnRzIFsgMTQgMCBSIF0KL0VuY29kaW5nIC9JZGVudGl0eS1IIC9TdWJ0eXBlIC9UeXBlMCAvVG9Vbmljb2RlIDE5IDAgUiAvVHlwZSAvRm9udCA+PgplbmRvYmoKMTMgMCBvYmoKPDwgL0FzY2VudCA4MDkgL0NhcEhlaWdodCAwIC9EZXNjZW50IC0xOTEgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xNDYgLTIxNiAxMDE4IDEwNDQgXSAvRm9udEZpbGUyIDE3IDAgUgovRm9udE5hbWUgL0d1YXJkaWFuU2Fuc0NvbmQtUmVndWxhciAvSXRhbGljQW5nbGUgMCAvTWF4V2lkdGggNjk1IC9TdGVtViAwCi9UeXBlIC9Gb250RGVzY3JpcHRvciAvWEhlaWdodCAwID4+CmVuZG9iagoxOCAwIG9iagpbIDMyIFsgMTU4IF0gNDggWyA1MzUgMjg4IDQyNSA0MjIgNDc0IF0gNTQgWyA0ODkgXSA1NiBbIDQ5NCBdIDY3ClsgNDc0IDU0NiBdIDc2IFsgNDE4IF0gODMgWyA0MjIgNDQ1IF0gOTcgWyA0MDkgXSAxMDEgWyA0MjcgXSAxMDMKWyA0MjcgNDYxIDE5MyBdIDEwNyBbIDQxNSAxOTMgNjk1IDQ2MSA0NTYgXSAxMTQgWyAyODggXSAxMTYgWyAyOTAgNDU1IF0gMTIxClsgNDE0IF0gXQplbmRvYmoKMyAwIG9iago8PCAvRjEgMTUgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvQ0EgMCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+Ci9BMiA8PCAvQ0EgMSAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8ID4+CmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTEgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iagoyMiAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMjExMDI2MTAwMjUxWikKL0NyZWF0b3IgKE1hdHBsb3RsaWIgdjMuNC4zLCBodHRwczovL21hdHBsb3RsaWIub3JnKQovUHJvZHVjZXIgKE1hdHBsb3RsaWIgcGRmIGJhY2tlbmQgdjMuNC4zKSA+PgplbmRvYmoKeHJlZgowIDIzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDU1MDQzIDAwMDAwIG4gCjAwMDAwNTQ4NDkgMDAwMDAgbiAKMDAwMDA1NDg4MSAwMDAwMCBuIAowMDAwMDU0OTgwIDAwMDAwIG4gCjAwMDAwNTUwMDEgMDAwMDAgbiAKMDAwMDA1NTAyMiAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDA0MDIgMDAwMDAgbiAKMDAwMDAwMjM5MyAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDIzNzIgMDAwMDAgbiAKMDAwMDA1NDM4NyAwMDAwMCBuIAowMDAwMDU0MDEzIDAwMDAwIG4gCjAwMDAwNTQyMzMgMDAwMDAgbiAKMDAwMDA1MzQ1MSAwMDAwMCBuIAowMDAwMDAyNDEzIDAwMDAwIG4gCjAwMDAwNTQ2MTcgMDAwMDAgbiAKMDAwMDA1MzU5OSAwMDAwMCBuIAowMDAwMDUzNDI4IDAwMDAwIG4gCjAwMDAwNTM0MDYgMDAwMDAgbiAKMDAwMDA1NTEwMyAwMDAwMCBuIAp0cmFpbGVyCjw8IC9JbmZvIDIyIDAgUiAvUm9vdCAxIDAgUiAvU2l6ZSAyMyA+PgpzdGFydHhyZWYKNTUyNTQKJSVFT0YK\n",
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<svg height=\"242.274875pt\" version=\"1.1\" viewBox=\"0 0 709.65375 242.274875\" width=\"709.65375pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n   <cc:Work>\n    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n    <dc:date>2021-10-26T10:02:50.883652</dc:date>\n    <dc:format>image/svg+xml</dc:format>\n    <dc:creator>\n     <cc:Agent>\n      <dc:title>Matplotlib v3.4.3, https://matplotlib.org/</dc:title>\n     </cc:Agent>\n    </dc:creator>\n   </cc:Work>\n  </rdf:RDF>\n </metadata>\n <defs>\n  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n  <g id=\"patch_1\">\n   <path d=\"M 0 242.274875 \nL 709.65375 242.274875 \nL 709.65375 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n  </g>\n  <g id=\"axes_1\">\n   <g id=\"patch_2\">\n    <path d=\"M 54.24875 201.8505 \nL 370.12125 201.8505 \nL 370.12125 23.7705 \nL 54.24875 23.7705 \nz\n\" style=\"fill:#ffffff;\"/>\n   </g>\n   <g id=\"patch_3\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 68.606591 201.8505 \nL 82.964432 201.8505 \nL 82.964432 73.317551 \nL 68.606591 73.317551 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_4\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 82.964432 201.8505 \nL 97.322273 201.8505 \nL 97.322273 32.2505 \nL 82.964432 32.2505 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_5\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 97.322273 201.8505 \nL 111.680114 201.8505 \nL 111.680114 88.214023 \nL 97.322273 88.214023 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_6\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 111.680114 201.8505 \nL 126.037955 201.8505 \nL 126.037955 123.379466 \nL 111.680114 123.379466 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_7\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 126.037955 201.8505 \nL 140.395795 201.8505 \nL 140.395795 155.166747 \nL 126.037955 155.166747 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_8\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 140.395795 201.8505 \nL 154.753636 201.8505 \nL 154.753636 174.743805 \nL 140.395795 174.743805 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_9\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 154.753636 201.8505 \nL 169.111477 201.8505 \nL 169.111477 185.407399 \nL 154.753636 185.407399 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_10\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 169.111477 201.8505 \nL 183.469318 201.8505 \nL 183.469318 193.303344 \nL 169.111477 193.303344 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_11\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 183.469318 201.8505 \nL 197.827159 201.8505 \nL 197.827159 197.658323 \nL 183.469318 197.658323 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_12\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 197.827159 201.8505 \nL 212.185 201.8505 \nL 212.185 198.838645 \nL 197.827159 198.838645 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_13\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 212.185 201.8505 \nL 226.542841 201.8505 \nL 226.542841 200.425974 \nL 212.185 200.425974 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_14\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 226.542841 201.8505 \nL 240.900682 201.8505 \nL 240.900682 200.873682 \nL 226.542841 200.873682 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_15\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 240.900682 201.8505 \nL 255.258523 201.8505 \nL 255.258523 201.443493 \nL 240.900682 201.443493 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_16\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 255.258523 201.8505 \nL 269.616364 201.8505 \nL 269.616364 201.565595 \nL 255.258523 201.565595 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_17\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 269.616364 201.8505 \nL 283.974205 201.8505 \nL 283.974205 201.769099 \nL 269.616364 201.769099 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_18\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 283.974205 201.8505 \nL 298.332045 201.8505 \nL 298.332045 201.769099 \nL 283.974205 201.769099 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_19\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 298.332045 201.8505 \nL 312.689886 201.8505 \nL 312.689886 201.809799 \nL 298.332045 201.809799 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_20\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 312.689886 201.8505 \nL 327.047727 201.8505 \nL 327.047727 201.809799 \nL 312.689886 201.809799 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_21\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 327.047727 201.8505 \nL 341.405568 201.8505 \nL 341.405568 201.8505 \nL 327.047727 201.8505 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_22\">\n    <path clip-path=\"url(#p2dbc2aca47)\" d=\"M 341.405568 201.8505 \nL 355.763409 201.8505 \nL 355.763409 201.809799 \nL 341.405568 201.809799 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"matplotlib.axis_1\">\n    <g id=\"xtick_1\">\n     <g id=\"line2d_1\">\n      <defs>\n       <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"mccc0f7301f\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"68.331273\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_1\">\n      <!-- 0 -->\n      <g transform=\"translate(65.121273 217.65925)scale(0.12 -0.12)\">\n       <defs>\n        <path d=\"M 1722 -70 \nC 2656 -70 3155 646 3155 2061 \nL 3155 2406 \nC 3155 3891 2598 4499 1715 4499 \nC 819 4499 269 3834 269 2368 \nL 269 2042 \nC 269 499 845 -70 1722 -70 \nz\nM 1728 384 \nC 1069 384 845 979 845 2016 \nL 845 2490 \nC 845 3494 1088 4051 1709 4051 \nC 2336 4051 2592 3514 2592 2458 \nL 2592 1978 \nC 2592 934 2374 384 1728 384 \nz\n\" id=\"GuardianSansCond-Regular-30\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_2\">\n     <g id=\"line2d_2\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"123.3949\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_2\">\n      <!-- 200 -->\n      <g transform=\"translate(114.4249 217.65925)scale(0.12 -0.12)\">\n       <defs>\n        <path d=\"M 173 0 \nL 2470 0 \nL 2470 461 \nL 800 461 \nL 800 480 \nL 1574 1421 \nC 2067 2035 2419 2528 2419 3264 \nC 2419 4026 2029 4499 1222 4499 \nC 806 4499 499 4410 269 4282 \nL 269 3853 \nC 467 3949 730 4032 1056 4032 \nC 1619 4032 1850 3750 1850 3213 \nC 1850 2630 1542 2189 1152 1670 \nL 173 397 \nL 173 0 \nz\n\" id=\"GuardianSansCond-Regular-32\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#GuardianSansCond-Regular-32\"/>\n       <use x=\"42.499985\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"95.999969\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_3\">\n     <g id=\"line2d_3\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"178.458528\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_3\">\n      <!-- 400 -->\n      <g transform=\"translate(169.194153 217.65925)scale(0.12 -0.12)\">\n       <defs>\n        <path d=\"M 1805 0 \nL 2330 0 \nL 2330 1107 \nL 2957 1107 \nL 2957 1562 \nL 2330 1562 \nL 2330 4435 \nL 1869 4435 \nL 70 1504 \nL 70 1107 \nL 1805 1107 \nL 1805 0 \nz\nM 608 1562 \nL 608 1581 \nL 1779 3475 \nL 1805 3475 \nL 1805 1562 \nL 608 1562 \nz\n\" id=\"GuardianSansCond-Regular-34\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#GuardianSansCond-Regular-34\"/>\n       <use x=\"47.399994\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"100.899979\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_4\">\n     <g id=\"line2d_4\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"233.522156\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_4\">\n      <!-- 600 -->\n      <g transform=\"translate(224.167781 217.65925)scale(0.12 -0.12)\">\n       <defs>\n        <path d=\"M 1632 384 \nC 1082 384 845 915 845 1837 \nL 845 2054 \nC 992 2150 1254 2278 1594 2278 \nC 2086 2278 2323 1984 2323 1357 \nC 2323 742 2086 384 1632 384 \nz\nM 1632 -70 \nC 2438 -70 2886 544 2886 1408 \nC 2886 2234 2490 2746 1754 2746 \nC 1363 2746 1056 2611 845 2445 \nC 877 3853 1440 4038 2029 4038 \nC 2291 4038 2554 3974 2688 3930 \nL 2688 4352 \nC 2547 4442 2272 4499 1958 4499 \nC 1043 4499 275 3981 275 2208 \nL 275 1843 \nC 275 691 717 -70 1632 -70 \nz\n\" id=\"GuardianSansCond-Regular-36\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#GuardianSansCond-Regular-36\"/>\n       <use x=\"48.899994\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"102.399979\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_5\">\n     <g id=\"line2d_5\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"288.585783\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_5\">\n      <!-- 800 -->\n      <g transform=\"translate(279.201408 217.65925)scale(0.12 -0.12)\">\n       <defs>\n        <path d=\"M 1581 -64 \nC 2445 -64 2931 467 2931 1139 \nC 2931 1760 2592 2074 2106 2330 \nC 2490 2541 2822 2899 2822 3424 \nC 2822 4077 2394 4499 1606 4499 \nC 819 4499 384 4013 384 3398 \nC 384 2848 678 2509 1069 2285 \nC 602 2054 230 1683 230 1082 \nC 230 384 710 -64 1581 -64 \nz\nM 1587 390 \nC 1082 390 768 678 768 1126 \nC 768 1581 1037 1894 1414 2080 \nC 2029 1792 2387 1574 2387 1082 \nC 2387 614 2054 390 1587 390 \nz\nM 1754 2522 \nC 1210 2778 928 3021 928 3430 \nC 928 3821 1171 4051 1606 4051 \nC 2067 4051 2285 3782 2285 3398 \nC 2285 3008 2099 2765 1754 2522 \nz\n\" id=\"GuardianSansCond-Regular-38\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#GuardianSansCond-Regular-38\"/>\n       <use x=\"49.399994\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"102.899979\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_6\">\n     <g id=\"line2d_6\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"343.649411\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_6\">\n      <!-- 1000 -->\n      <g transform=\"translate(332.291599 217.65925)scale(0.12 -0.12)\">\n       <defs>\n        <path d=\"M 832 0 \nL 1363 0 \nL 1363 4474 \nL 1171 4474 \nL 141 4083 \nL 141 3776 \nL 832 3846 \nL 832 0 \nz\n\" id=\"GuardianSansCond-Regular-31\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#GuardianSansCond-Regular-31\"/>\n       <use x=\"28.799988\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"82.299973\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"135.799957\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"text_7\">\n     <!-- Length -->\n     <g transform=\"translate(197.281562 232.75925)scale(0.12 -0.12)\">\n      <defs>\n       <path d=\"M 416 0 \nL 2541 0 \nL 2541 461 \nL 954 461 \nL 954 4435 \nL 416 4435 \nL 416 0 \nz\n\" id=\"GuardianSansCond-Regular-4c\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 1555 -51 \nC 1984 -51 2317 102 2470 243 \nL 2470 627 \nC 2240 499 1965 397 1613 397 \nC 1037 397 742 698 723 1466 \nL 2554 1466 \nL 2554 1798 \nC 2554 2893 2176 3334 1402 3334 \nC 659 3334 186 2810 186 1722 \nL 186 1549 \nC 186 499 634 -51 1555 -51 \nz\nM 1382 2906 \nC 1830 2906 2010 2611 2010 1894 \nL 723 1894 \nC 736 2630 992 2906 1382 2906 \nz\n\" id=\"GuardianSansCond-Regular-65\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 346 0 \nL 870 0 \nL 870 2688 \nC 1037 2778 1306 2886 1587 2886 \nC 1965 2886 2093 2765 2093 2458 \nL 2093 0 \nL 2611 0 \nL 2611 2528 \nC 2611 3085 2342 3334 1811 3334 \nC 1440 3334 1107 3194 870 3021 \nL 845 3021 \nL 845 3283 \nL 346 3283 \nL 346 0 \nz\n\" id=\"GuardianSansCond-Regular-6e\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 1325 -1235 \nC 2240 -1235 2675 -787 2675 -179 \nC 2675 416 2336 704 1696 704 \nL 1069 704 \nC 858 704 774 806 774 966 \nC 774 1069 826 1178 890 1242 \nC 1018 1197 1171 1178 1331 1178 \nC 1939 1178 2413 1530 2413 2208 \nL 2413 2304 \nC 2413 2560 2336 2739 2234 2874 \nL 2682 2874 \nL 2682 3283 \nL 1747 3283 \nC 1626 3315 1485 3334 1325 3334 \nC 704 3334 250 2944 250 2278 \nL 250 2182 \nC 250 1786 429 1510 634 1376 \nC 422 1210 294 1024 294 787 \nC 294 544 442 403 627 333 \nL 627 307 \nC 320 192 64 -38 64 -422 \nC 64 -915 506 -1235 1325 -1235 \nz\nM 1312 -819 \nC 832 -819 595 -640 595 -326 \nC 595 -51 762 141 966 218 \nL 1632 218 \nC 2022 218 2150 45 2150 -237 \nC 2150 -602 1926 -819 1312 -819 \nz\nM 1331 1581 \nC 998 1581 762 1773 762 2189 \nL 762 2323 \nC 762 2726 973 2931 1331 2931 \nC 1670 2931 1901 2746 1901 2310 \nL 1901 2176 \nC 1901 1779 1683 1581 1331 1581 \nz\n\" id=\"GuardianSansCond-Regular-67\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 1222 -38 \nC 1466 -38 1619 26 1722 90 \nL 1722 442 \nC 1632 416 1517 390 1382 390 \nC 1107 390 1005 480 1005 781 \nL 1005 2848 \nL 1683 2848 \nL 1683 3283 \nL 1005 3283 \nL 1005 4051 \nL 486 4051 \nL 486 3283 \nL 96 3283 \nL 96 2848 \nL 486 2848 \nL 486 710 \nC 486 160 774 -38 1222 -38 \nz\n\" id=\"GuardianSansCond-Regular-74\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 346 0 \nL 870 0 \nL 870 2688 \nC 1037 2778 1306 2886 1587 2886 \nC 1965 2886 2093 2765 2093 2458 \nL 2093 0 \nL 2611 0 \nL 2611 2528 \nC 2611 3085 2336 3334 1805 3334 \nC 1440 3334 1126 3200 896 3034 \nL 870 3034 \nL 870 4698 \nL 346 4698 \nL 346 0 \nz\n\" id=\"GuardianSansCond-Regular-68\" transform=\"scale(0.015625)\"/>\n      </defs>\n      <use xlink:href=\"#GuardianSansCond-Regular-4c\"/>\n      <use x=\"41.799988\" xlink:href=\"#GuardianSansCond-Regular-65\"/>\n      <use x=\"84.499985\" xlink:href=\"#GuardianSansCond-Regular-6e\"/>\n      <use x=\"130.599976\" xlink:href=\"#GuardianSansCond-Regular-67\"/>\n      <use x=\"173.299973\" xlink:href=\"#GuardianSansCond-Regular-74\"/>\n      <use x=\"202.299957\" xlink:href=\"#GuardianSansCond-Regular-68\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"matplotlib.axis_2\">\n    <g id=\"ytick_1\">\n     <g id=\"line2d_7\">\n      <defs>\n       <path d=\"M 0 0 \nL -3.5 0 \n\" id=\"m18c6db5eea\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"54.24875\" xlink:href=\"#m18c6db5eea\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_8\">\n      <!-- 0 -->\n      <g transform=\"translate(40.82875 206.254875)scale(0.12 -0.12)\">\n       <use xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_2\">\n     <g id=\"line2d_8\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"54.24875\" xlink:href=\"#m18c6db5eea\" y=\"161.149756\"/>\n      </g>\n     </g>\n     <g id=\"text_9\">\n      <!-- 1000 -->\n      <g transform=\"translate(24.533125 165.554131)scale(0.12 -0.12)\">\n       <use xlink:href=\"#GuardianSansCond-Regular-31\"/>\n       <use x=\"28.799988\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"82.299973\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"135.799957\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_3\">\n     <g id=\"line2d_9\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"54.24875\" xlink:href=\"#m18c6db5eea\" y=\"120.449012\"/>\n      </g>\n     </g>\n     <g id=\"text_10\">\n      <!-- 2000 -->\n      <g transform=\"translate(22.88875 124.853387)scale(0.12 -0.12)\">\n       <use xlink:href=\"#GuardianSansCond-Regular-32\"/>\n       <use x=\"42.499985\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"95.999969\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"149.499954\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_4\">\n     <g id=\"line2d_10\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"54.24875\" xlink:href=\"#m18c6db5eea\" y=\"79.748268\"/>\n      </g>\n     </g>\n     <g id=\"text_11\">\n      <!-- 3000 -->\n      <g transform=\"translate(22.924375 84.152643)scale(0.12 -0.12)\">\n       <defs>\n        <path d=\"M 1094 -64 \nC 1920 -64 2432 416 2432 1248 \nC 2432 1939 2112 2253 1606 2362 \nL 1606 2381 \nC 2042 2515 2310 2803 2310 3405 \nC 2310 4096 1882 4499 1158 4499 \nC 787 4499 486 4429 275 4320 \nL 275 3891 \nC 461 3968 678 4038 998 4038 \nC 1478 4038 1754 3866 1754 3302 \nC 1754 2797 1478 2547 1018 2547 \nL 717 2547 \nL 717 2086 \nL 1056 2086 \nC 1600 2086 1869 1837 1869 1267 \nC 1869 646 1517 403 947 403 \nC 646 403 358 493 147 608 \nL 147 166 \nC 358 32 640 -64 1094 -64 \nz\n\" id=\"GuardianSansCond-Regular-33\" transform=\"scale(0.015625)\"/>\n       </defs>\n       <use xlink:href=\"#GuardianSansCond-Regular-33\"/>\n       <use x=\"42.199997\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"95.699982\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"149.199966\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_5\">\n     <g id=\"line2d_11\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"54.24875\" xlink:href=\"#m18c6db5eea\" y=\"39.047524\"/>\n      </g>\n     </g>\n     <g id=\"text_12\">\n      <!-- 4000 -->\n      <g transform=\"translate(22.3 43.451899)scale(0.12 -0.12)\">\n       <use xlink:href=\"#GuardianSansCond-Regular-34\"/>\n       <use x=\"47.399994\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"100.899979\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n       <use x=\"154.399963\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"text_13\">\n     <!-- Count -->\n     <g transform=\"translate(16.00875 125.626125)rotate(-90)scale(0.12 -0.12)\">\n      <defs>\n       <path d=\"M 1882 -64 \nC 2304 -64 2637 38 2874 186 \nL 2874 640 \nC 2643 518 2342 397 1946 397 \nC 1114 397 806 986 806 2042 \nL 806 2445 \nC 806 3648 1267 4038 1920 4038 \nC 2278 4038 2541 3955 2822 3840 \nL 2822 4288 \nC 2618 4410 2336 4499 1952 4499 \nC 1005 4499 237 3994 237 2387 \nL 237 2042 \nC 237 563 851 -64 1882 -64 \nz\n\" id=\"GuardianSansCond-Regular-43\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 1459 -51 \nC 2272 -51 2733 570 2733 1542 \nL 2733 1747 \nC 2733 2771 2291 3334 1459 3334 \nC 659 3334 186 2714 186 1741 \nL 186 1530 \nC 186 531 614 -51 1459 -51 \nz\nM 1466 378 \nC 992 378 723 762 723 1472 \nL 723 1818 \nC 723 2451 947 2906 1453 2906 \nC 1920 2906 2195 2560 2195 1805 \nL 2195 1466 \nC 2195 826 1958 378 1466 378 \nz\n\" id=\"GuardianSansCond-Regular-6f\" transform=\"scale(0.015625)\"/>\n       <path d=\"M 1158 -51 \nC 1523 -51 1824 109 2042 262 \nL 2067 262 \nL 2118 0 \nL 2566 0 \nL 2566 3283 \nL 2042 3283 \nL 2042 602 \nC 1888 512 1626 397 1350 397 \nC 947 397 858 557 858 838 \nL 858 3283 \nL 333 3283 \nL 333 826 \nC 333 301 576 -51 1158 -51 \nz\n\" id=\"GuardianSansCond-Regular-75\" transform=\"scale(0.015625)\"/>\n      </defs>\n      <use xlink:href=\"#GuardianSansCond-Regular-43\"/>\n      <use x=\"47.399994\" xlink:href=\"#GuardianSansCond-Regular-6f\"/>\n      <use x=\"92.999985\" xlink:href=\"#GuardianSansCond-Regular-75\"/>\n      <use x=\"138.499969\" xlink:href=\"#GuardianSansCond-Regular-6e\"/>\n      <use x=\"184.59996\" xlink:href=\"#GuardianSansCond-Regular-74\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"patch_23\">\n    <path d=\"M 54.24875 201.8505 \nL 54.24875 23.7705 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_24\">\n    <path d=\"M 370.12125 201.8505 \nL 370.12125 23.7705 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_25\">\n    <path d=\"M 54.24875 201.8505 \nL 370.12125 201.8505 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_26\">\n    <path d=\"M 54.24875 23.7705 \nL 370.12125 23.7705 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"text_14\">\n    <!-- Dialogue Token Length -->\n    <g transform=\"translate(153.79525 17.7705)scale(0.144 -0.144)\">\n     <defs>\n      <path d=\"M 416 0 \nL 1498 0 \nC 2714 0 3270 813 3270 2163 \nL 3270 2400 \nC 3270 3802 2637 4435 1491 4435 \nL 416 4435 \nL 416 0 \nz\nM 954 461 \nL 954 3974 \nL 1446 3974 \nC 2234 3974 2694 3603 2694 2400 \nL 2694 2074 \nC 2694 941 2323 461 1510 461 \nL 954 461 \nz\n\" id=\"GuardianSansCond-Regular-44\" transform=\"scale(0.015625)\"/>\n      <path d=\"M 358 0 \nL 883 0 \nL 883 3283 \nL 358 3283 \nL 358 0 \nz\nM 352 3910 \nL 883 3910 \nL 883 4474 \nL 352 4474 \nL 352 3910 \nz\n\" id=\"GuardianSansCond-Regular-69\" transform=\"scale(0.015625)\"/>\n      <path d=\"M 1082 -51 \nC 1395 -51 1638 77 1779 230 \nL 1811 230 \nL 1862 0 \nL 2291 0 \nL 2291 2413 \nC 2291 3027 1958 3334 1293 3334 \nC 915 3334 634 3258 410 3155 \nL 410 2771 \nC 576 2829 806 2886 1094 2886 \nC 1600 2886 1766 2739 1766 2278 \nL 1766 1958 \nL 1088 1856 \nC 480 1766 160 1466 160 883 \nC 160 250 525 -51 1082 -51 \nz\nM 1222 358 \nC 877 358 704 544 704 915 \nC 704 1274 877 1440 1242 1485 \nL 1766 1549 \nL 1766 525 \nC 1658 435 1459 358 1222 358 \nz\n\" id=\"GuardianSansCond-Regular-61\" transform=\"scale(0.015625)\"/>\n      <path d=\"M 358 0 \nL 877 0 \nL 877 4698 \nL 358 4698 \nL 358 0 \nz\n\" id=\"GuardianSansCond-Regular-6c\" transform=\"scale(0.015625)\"/>\n      <path id=\"GuardianSansCond-Regular-20\" transform=\"scale(0.015625)\"/>\n      <path d=\"M 1152 0 \nL 1690 0 \nL 1690 3974 \nL 2746 3974 \nL 2746 4435 \nL 90 4435 \nL 90 3974 \nL 1152 3974 \nL 1152 0 \nz\n\" id=\"GuardianSansCond-Regular-54\" transform=\"scale(0.015625)\"/>\n      <path d=\"M 870 4698 \nL 346 4698 \nL 346 0 \nL 870 0 \nL 870 4698 \nz\nM 973 1696 \nL 1984 0 \nL 2592 0 \nL 1549 1741 \nL 2515 3283 \nL 1939 3283 \nL 973 1696 \nz\n\" id=\"GuardianSansCond-Regular-6b\" transform=\"scale(0.015625)\"/>\n     </defs>\n     <use xlink:href=\"#GuardianSansCond-Regular-44\"/>\n     <use x=\"54.599991\" xlink:href=\"#GuardianSansCond-Regular-69\"/>\n     <use x=\"73.899979\" xlink:href=\"#GuardianSansCond-Regular-61\"/>\n     <use x=\"114.799973\" xlink:href=\"#GuardianSansCond-Regular-6c\"/>\n     <use x=\"134.09996\" xlink:href=\"#GuardianSansCond-Regular-6f\"/>\n     <use x=\"179.699951\" xlink:href=\"#GuardianSansCond-Regular-67\"/>\n     <use x=\"222.399948\" xlink:href=\"#GuardianSansCond-Regular-75\"/>\n     <use x=\"267.899933\" xlink:href=\"#GuardianSansCond-Regular-65\"/>\n     <use x=\"310.59993\" xlink:href=\"#GuardianSansCond-Regular-20\"/>\n     <use x=\"326.399918\" xlink:href=\"#GuardianSansCond-Regular-54\"/>\n     <use x=\"370.899902\" xlink:href=\"#GuardianSansCond-Regular-6f\"/>\n     <use x=\"416.499893\" xlink:href=\"#GuardianSansCond-Regular-6b\"/>\n     <use x=\"457.999878\" xlink:href=\"#GuardianSansCond-Regular-65\"/>\n     <use x=\"500.699875\" xlink:href=\"#GuardianSansCond-Regular-6e\"/>\n     <use x=\"546.799866\" xlink:href=\"#GuardianSansCond-Regular-20\"/>\n     <use x=\"562.599854\" xlink:href=\"#GuardianSansCond-Regular-4c\"/>\n     <use x=\"604.399841\" xlink:href=\"#GuardianSansCond-Regular-65\"/>\n     <use x=\"647.099838\" xlink:href=\"#GuardianSansCond-Regular-6e\"/>\n     <use x=\"693.199829\" xlink:href=\"#GuardianSansCond-Regular-67\"/>\n     <use x=\"735.899826\" xlink:href=\"#GuardianSansCond-Regular-74\"/>\n     <use x=\"764.899811\" xlink:href=\"#GuardianSansCond-Regular-68\"/>\n    </g>\n   </g>\n  </g>\n  <g id=\"axes_2\">\n   <g id=\"patch_27\">\n    <path d=\"M 386.58125 201.8505 \nL 702.45375 201.8505 \nL 702.45375 23.7705 \nL 386.58125 23.7705 \nz\n\" style=\"fill:#ffffff;\"/>\n   </g>\n   <g id=\"patch_28\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 400.939091 201.8505 \nL 415.296932 201.8505 \nL 415.296932 200.670178 \nL 400.939091 200.670178 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_29\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 415.296932 201.8505 \nL 429.654773 201.8505 \nL 429.654773 169.981817 \nL 415.296932 169.981817 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_30\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 429.654773 201.8505 \nL 444.012614 201.8505 \nL 444.012614 125.414503 \nL 429.654773 125.414503 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_31\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 444.012614 201.8505 \nL 458.370455 201.8505 \nL 458.370455 114.547404 \nL 444.012614 114.547404 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_32\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 458.370455 201.8505 \nL 472.728295 201.8505 \nL 472.728295 119.675698 \nL 458.370455 119.675698 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_33\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 472.728295 201.8505 \nL 487.086136 201.8505 \nL 487.086136 132.781338 \nL 472.728295 132.781338 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_34\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 487.086136 201.8505 \nL 501.443977 201.8505 \nL 501.443977 143.567035 \nL 487.086136 143.567035 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_35\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 501.443977 201.8505 \nL 515.801818 201.8505 \nL 515.801818 153.498016 \nL 501.443977 153.498016 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_36\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 515.801818 201.8505 \nL 530.159659 201.8505 \nL 530.159659 165.341933 \nL 515.801818 165.341933 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_37\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 530.159659 201.8505 \nL 544.5175 201.8505 \nL 544.5175 178.732477 \nL 530.159659 178.732477 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_38\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 544.5175 201.8505 \nL 558.875341 201.8505 \nL 558.875341 179.261587 \nL 544.5175 179.261587 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_39\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 558.875341 201.8505 \nL 573.233182 201.8505 \nL 573.233182 184.186377 \nL 558.875341 184.186377 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_40\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 573.233182 201.8505 \nL 587.591023 201.8505 \nL 587.591023 188.74486 \nL 573.233182 188.74486 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_41\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 587.591023 201.8505 \nL 601.948864 201.8505 \nL 601.948864 190.779898 \nL 587.591023 190.779898 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_42\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 601.948864 201.8505 \nL 616.306705 201.8505 \nL 616.306705 194.035957 \nL 601.948864 194.035957 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_43\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 616.306705 201.8505 \nL 630.664545 201.8505 \nL 630.664545 195.786089 \nL 616.306705 195.786089 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_44\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 630.664545 201.8505 \nL 645.022386 201.8505 \nL 645.022386 197.780426 \nL 630.664545 197.780426 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_45\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 645.022386 201.8505 \nL 659.380227 201.8505 \nL 659.380227 199.65266 \nL 645.022386 199.65266 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_46\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 659.380227 201.8505 \nL 673.738068 201.8505 \nL 673.738068 201.158587 \nL 659.380227 201.158587 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"patch_47\">\n    <path clip-path=\"url(#p5ef0d16bad)\" d=\"M 673.738068 201.8505 \nL 688.095909 201.8505 \nL 688.095909 201.809799 \nL 673.738068 201.809799 \nz\n\" style=\"fill:#0071bc;stroke:#0071bc;stroke-linejoin:miter;\"/>\n   </g>\n   <g id=\"matplotlib.axis_3\">\n    <g id=\"xtick_7\">\n     <g id=\"line2d_12\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"393.576096\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_15\">\n      <!-- 0 -->\n      <g transform=\"translate(390.366096 217.65925)scale(0.12 -0.12)\">\n       <use xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_8\">\n     <g id=\"line2d_13\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"467.206049\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_16\">\n      <!-- 20 -->\n      <g transform=\"translate(461.446049 217.65925)scale(0.12 -0.12)\">\n       <use xlink:href=\"#GuardianSansCond-Regular-32\"/>\n       <use x=\"42.499985\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_9\">\n     <g id=\"line2d_14\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"540.836002\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_17\">\n      <!-- 40 -->\n      <g transform=\"translate(534.781627 217.65925)scale(0.12 -0.12)\">\n       <use xlink:href=\"#GuardianSansCond-Regular-34\"/>\n       <use x=\"47.399994\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_10\">\n     <g id=\"line2d_15\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"614.465956\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_18\">\n      <!-- 60 -->\n      <g transform=\"translate(608.321581 217.65925)scale(0.12 -0.12)\">\n       <use xlink:href=\"#GuardianSansCond-Regular-36\"/>\n       <use x=\"48.899994\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_11\">\n     <g id=\"line2d_16\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"688.095909\" xlink:href=\"#mccc0f7301f\" y=\"201.8505\"/>\n      </g>\n     </g>\n     <g id=\"text_19\">\n      <!-- 80 -->\n      <g transform=\"translate(681.921534 217.65925)scale(0.12 -0.12)\">\n       <use xlink:href=\"#GuardianSansCond-Regular-38\"/>\n       <use x=\"49.399994\" xlink:href=\"#GuardianSansCond-Regular-30\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"text_20\">\n     <!-- Length -->\n     <g transform=\"translate(529.614062 232.75925)scale(0.12 -0.12)\">\n      <use xlink:href=\"#GuardianSansCond-Regular-4c\"/>\n      <use x=\"41.799988\" xlink:href=\"#GuardianSansCond-Regular-65\"/>\n      <use x=\"84.499985\" xlink:href=\"#GuardianSansCond-Regular-6e\"/>\n      <use x=\"130.599976\" xlink:href=\"#GuardianSansCond-Regular-67\"/>\n      <use x=\"173.299973\" xlink:href=\"#GuardianSansCond-Regular-74\"/>\n      <use x=\"202.299957\" xlink:href=\"#GuardianSansCond-Regular-68\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"matplotlib.axis_4\">\n    <g id=\"ytick_6\">\n     <g id=\"line2d_17\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"386.58125\" xlink:href=\"#m18c6db5eea\" y=\"201.8505\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_7\">\n     <g id=\"line2d_18\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"386.58125\" xlink:href=\"#m18c6db5eea\" y=\"161.149756\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_8\">\n     <g id=\"line2d_19\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"386.58125\" xlink:href=\"#m18c6db5eea\" y=\"120.449012\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_9\">\n     <g id=\"line2d_20\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"386.58125\" xlink:href=\"#m18c6db5eea\" y=\"79.748268\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_10\">\n     <g id=\"line2d_21\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"386.58125\" xlink:href=\"#m18c6db5eea\" y=\"39.047524\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"patch_48\">\n    <path d=\"M 386.58125 201.8505 \nL 386.58125 23.7705 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_49\">\n    <path d=\"M 702.45375 201.8505 \nL 702.45375 23.7705 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_50\">\n    <path d=\"M 386.58125 201.8505 \nL 702.45375 201.8505 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_51\">\n    <path d=\"M 386.58125 23.7705 \nL 702.45375 23.7705 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"text_21\">\n    <!-- Summary Token Length -->\n    <g transform=\"translate(484.168 17.7705)scale(0.144 -0.144)\">\n     <defs>\n      <path d=\"M 1184 -70 \nC 2138 -70 2509 499 2509 1248 \nC 2509 2029 2112 2259 1562 2502 \nL 1242 2643 \nC 858 2810 730 2970 730 3360 \nC 730 3808 986 4038 1459 4038 \nC 1843 4038 2144 3936 2336 3840 \nL 2336 4301 \nC 2157 4397 1914 4499 1466 4499 \nC 653 4499 198 4058 198 3322 \nC 198 2637 544 2349 1024 2138 \nL 1344 1997 \nC 1760 1811 1958 1677 1958 1197 \nC 1958 659 1702 397 1146 397 \nC 794 397 442 512 166 646 \nL 166 186 \nC 390 51 723 -70 1184 -70 \nz\n\" id=\"GuardianSansCond-Regular-53\" transform=\"scale(0.015625)\"/>\n      <path d=\"M 346 0 \nL 870 0 \nL 870 2688 \nC 1050 2790 1267 2886 1523 2886 \nC 1856 2886 1971 2758 1971 2464 \nL 1971 0 \nL 2490 0 \nL 2490 2688 \nC 2682 2797 2912 2886 3136 2886 \nC 3488 2886 3590 2746 3590 2464 \nL 3590 0 \nL 4115 0 \nL 4115 2528 \nC 4115 3104 3821 3334 3347 3334 \nC 2995 3334 2688 3187 2419 2995 \nL 2394 2995 \nC 2266 3226 2061 3334 1722 3334 \nC 1395 3334 1088 3181 870 3021 \nL 845 3021 \nL 845 3283 \nL 346 3283 \nL 346 0 \nz\n\" id=\"GuardianSansCond-Regular-6d\" transform=\"scale(0.015625)\"/>\n      <path d=\"M 346 0 \nL 870 0 \nL 870 2605 \nC 1062 2752 1306 2842 1587 2842 \nC 1638 2842 1728 2835 1786 2829 \nL 1786 3302 \nC 1747 3315 1677 3328 1606 3328 \nC 1306 3328 1030 3142 870 2938 \nL 845 2938 \nL 845 3283 \nL 346 3283 \nL 346 0 \nz\n\" id=\"GuardianSansCond-Regular-72\" transform=\"scale(0.015625)\"/>\n      <path d=\"M 570 -1261 \nC 1082 -1261 1306 -960 1485 -365 \nL 2592 3283 \nL 2067 3283 \nL 1485 1197 \nC 1421 992 1376 787 1376 787 \nL 1363 787 \nC 1363 787 1331 928 1248 1203 \nL 621 3283 \nL 51 3283 \nL 1120 13 \nL 1018 -294 \nC 896 -698 749 -826 480 -826 \nC 384 -826 262 -813 186 -800 \nL 186 -1171 \nC 282 -1222 435 -1261 570 -1261 \nz\n\" id=\"GuardianSansCond-Regular-79\" transform=\"scale(0.015625)\"/>\n     </defs>\n     <use xlink:href=\"#GuardianSansCond-Regular-53\"/>\n     <use x=\"42.199997\" xlink:href=\"#GuardianSansCond-Regular-75\"/>\n     <use x=\"87.699982\" xlink:href=\"#GuardianSansCond-Regular-6d\"/>\n     <use x=\"157.199966\" xlink:href=\"#GuardianSansCond-Regular-6d\"/>\n     <use x=\"226.699951\" xlink:href=\"#GuardianSansCond-Regular-61\"/>\n     <use x=\"267.599945\" xlink:href=\"#GuardianSansCond-Regular-72\"/>\n     <use x=\"296.399933\" xlink:href=\"#GuardianSansCond-Regular-79\"/>\n     <use x=\"337.799927\" xlink:href=\"#GuardianSansCond-Regular-20\"/>\n     <use x=\"353.599915\" xlink:href=\"#GuardianSansCond-Regular-54\"/>\n     <use x=\"398.099899\" xlink:href=\"#GuardianSansCond-Regular-6f\"/>\n     <use x=\"443.69989\" xlink:href=\"#GuardianSansCond-Regular-6b\"/>\n     <use x=\"485.199875\" xlink:href=\"#GuardianSansCond-Regular-65\"/>\n     <use x=\"527.899872\" xlink:href=\"#GuardianSansCond-Regular-6e\"/>\n     <use x=\"573.999863\" xlink:href=\"#GuardianSansCond-Regular-20\"/>\n     <use x=\"589.79985\" xlink:href=\"#GuardianSansCond-Regular-4c\"/>\n     <use x=\"631.599838\" xlink:href=\"#GuardianSansCond-Regular-65\"/>\n     <use x=\"674.299835\" xlink:href=\"#GuardianSansCond-Regular-6e\"/>\n     <use x=\"720.399826\" xlink:href=\"#GuardianSansCond-Regular-67\"/>\n     <use x=\"763.099823\" xlink:href=\"#GuardianSansCond-Regular-74\"/>\n     <use x=\"792.099808\" xlink:href=\"#GuardianSansCond-Regular-68\"/>\n    </g>\n   </g>\n  </g>\n </g>\n <defs>\n  <clipPath id=\"p2dbc2aca47\">\n   <rect height=\"178.08\" width=\"315.8725\" x=\"54.24875\" y=\"23.7705\"/>\n  </clipPath>\n  <clipPath id=\"p5ef0d16bad\">\n   <rect height=\"178.08\" width=\"315.8725\" x=\"386.58125\" y=\"23.7705\"/>\n  </clipPath>\n </defs>\n</svg>\n",
      "text/plain": [
       "<Figure size 720x252 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "d_len = [len(tokenizer.encode(s)) for s in dataset_samsum[\"train\"][\"dialogue\"]]\n",
    "s_len = [len(tokenizer.encode(s)) for s in dataset_samsum[\"train\"][\"summary\"]]\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(10, 3.5), sharey=True)\n",
    "axes[0].hist(d_len, bins=20, color=\"C0\", edgecolor=\"C0\")\n",
    "axes[0].set_title(\"Dialogue Token Length\")\n",
    "axes[0].set_xlabel(\"Length\")\n",
    "axes[0].set_ylabel(\"Count\")\n",
    "axes[1].hist(s_len, bins=20, color=\"C0\", edgecolor=\"C0\")\n",
    "axes[1].set_title(\"Summary Token Length\")\n",
    "axes[1].set_xlabel(\"Length\")\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#hide_output\n",
    "def convert_examples_to_features(example_batch):\n",
    "    input_encodings = tokenizer(example_batch[\"dialogue\"], max_length=1024,\n",
    "                                truncation=True)\n",
    "    \n",
    "    with tokenizer.as_target_tokenizer():\n",
    "        target_encodings = tokenizer(example_batch[\"summary\"], max_length=128,\n",
    "                                     truncation=True)\n",
    "    \n",
    "    return {\"input_ids\": input_encodings[\"input_ids\"],\n",
    "            \"attention_mask\": input_encodings[\"attention_mask\"],\n",
    "            \"labels\": target_encodings[\"input_ids\"]}\n",
    "\n",
    "dataset_samsum_pt = dataset_samsum.map(convert_examples_to_features, \n",
    "                                       batched=True)\n",
    "columns = [\"input_ids\", \"labels\", \"attention_mask\"]\n",
    "dataset_samsum_pt.set_format(type=\"torch\", columns=columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decoder_input</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>step</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>[PAD]</td>\n",
       "      <td>Transformers</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[PAD, Transformers]</td>\n",
       "      <td>are</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>[PAD, Transformers, are]</td>\n",
       "      <td>awesome</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[PAD, Transformers, are, awesome]</td>\n",
       "      <td>for</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>[PAD, Transformers, are, awesome, for]</td>\n",
       "      <td>text</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>[PAD, Transformers, are, awesome, for, text]</td>\n",
       "      <td>summarization</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                     decoder_input          label\n",
       "step                                                             \n",
       "1                                            [PAD]   Transformers\n",
       "2                              [PAD, Transformers]            are\n",
       "3                         [PAD, Transformers, are]        awesome\n",
       "4                [PAD, Transformers, are, awesome]            for\n",
       "5           [PAD, Transformers, are, awesome, for]           text\n",
       "6     [PAD, Transformers, are, awesome, for, text]  summarization"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#hide_input\n",
    "\n",
    "#id teacher-forcing\n",
    "#alt Decoder input and label alignemt for text generation.\n",
    "#caption Decoder input and label alignemt for text generation.\n",
    "text = ['PAD','Transformers', 'are', 'awesome', 'for', 'text', 'summarization']\n",
    "rows = []\n",
    "for i in range(len(text)-1):\n",
    "    rows.append({'step': i+1, 'decoder_input': text[:i+1], 'label': text[i+1]})\n",
    "pd.DataFrame(rows).set_index('step')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from transformers import DataCollatorForSeq2Seq\n",
    "\n",
    "seq2seq_data_collator = DataCollatorForSeq2Seq(tokenizer, model=model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from transformers import TrainingArguments, Trainer\n",
    "\n",
    "training_args = TrainingArguments(\n",
    "    output_dir='pegasus-samsum', num_train_epochs=1, warmup_steps=500,\n",
    "    per_device_train_batch_size=1, per_device_eval_batch_size=1,\n",
    "    weight_decay=0.01, logging_steps=10, push_to_hub=True,\n",
    "    evaluation_strategy='steps', eval_steps=500, save_steps=1e6,\n",
    "    gradient_accumulation_steps=16)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "04f65c507a094c53a28628b65aad0b0b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "VBox(children=(HTML(value=\"<center>\\n<img src=https://huggingface.co/front/assets/huggingface_logo-noborder.sv…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#hide_output\n",
    "from huggingface_hub import notebook_login\n",
    "\n",
    "notebook_login()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# hide_output\n",
    "trainer = Trainer(model=model, args=training_args,\n",
    "                  tokenizer=tokenizer, data_collator=seq2seq_data_collator,\n",
    "                  train_dataset=dataset_samsum_pt[\"train\"], \n",
    "                  eval_dataset=dataset_samsum_pt[\"validation\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# hide_output\n",
    "trainer.train()\n",
    "score = evaluate_summaries_pegasus(\n",
    "    dataset_samsum[\"test\"], rouge_metric, trainer.model, tokenizer,\n",
    "    batch_size=2, column_text=\"dialogue\", column_summary=\"summary\")\n",
    "\n",
    "rouge_dict = dict((rn, score[rn].mid.fmeasure) for rn in rouge_names)\n",
    "pd.DataFrame(rouge_dict, index=[f\"pegasus\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rouge1</th>\n",
       "      <th>rouge2</th>\n",
       "      <th>rougeL</th>\n",
       "      <th>rougeLsum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>pegasus</th>\n",
       "      <td>0.427614</td>\n",
       "      <td>0.200571</td>\n",
       "      <td>0.340648</td>\n",
       "      <td>0.340738</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           rouge1    rouge2    rougeL  rougeLsum\n",
       "pegasus  0.427614  0.200571  0.340648   0.340738"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# hide_input\n",
    "pd.DataFrame(rouge_dict, index=[f\"pegasus\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Saving model checkpoint to pegasus-samsum-test\n",
      "Configuration saved in pegasus-samsum-test/config.json\n",
      "Model weights saved in pegasus-samsum-test/pytorch_model.bin\n",
      "tokenizer config file saved in pegasus-samsum-test/tokenizer_config.json\n",
      "Special tokens file saved in pegasus-samsum-test/special_tokens_map.json\n",
      "Dropping the following result as it does not have all the necessary field:\n",
      "{'task': {'name': 'Sequence-to-sequence Language Modeling', 'type': 'text2text-generation'}, 'dataset': {'name': 'samsum', 'type': 'samsum', 'args': 'samsum'}}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'https://huggingface.co/lvwerra/pegasus-samsum-test/commit/236684ab026115ad5b9eb61f6ddbdaf3f07bddf8'"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# hide_output\n",
    "trainer.push_to_hub(\"Training complete!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Generating Dialogue Summaries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# hide\n",
    "import transformers\n",
    "transformers.logging.set_verbosity_error()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dialogue:\n",
      "Hannah: Hey, do you have Betty's number?\n",
      "Amanda: Lemme check\n",
      "Hannah: <file_gif>\n",
      "Amanda: Sorry, can't find it.\n",
      "Amanda: Ask Larry\n",
      "Amanda: He called her last time we were at the park together\n",
      "Hannah: I don't know him well\n",
      "Hannah: <file_gif>\n",
      "Amanda: Don't be shy, he's very nice\n",
      "Hannah: If you say so..\n",
      "Hannah: I'd rather you texted him\n",
      "Amanda: Just text him 🙂\n",
      "Hannah: Urgh.. Alright\n",
      "Hannah: Bye\n",
      "Amanda: Bye bye\n",
      "\n",
      "Reference Summary:\n",
      "Hannah needs Betty's number but Amanda doesn't have it. She needs to contact\n",
      "Larry.\n",
      "\n",
      "Model Summary:\n",
      "Amanda can't find Betty's number. Larry called Betty last time they were at the\n",
      "park together. Hannah wants Amanda to text Larry instead of calling Betty.\n"
     ]
    }
   ],
   "source": [
    "gen_kwargs = {\"length_penalty\": 0.8, \"num_beams\":8, \"max_length\": 128}\n",
    "sample_text = dataset_samsum[\"test\"][0][\"dialogue\"]\n",
    "reference = dataset_samsum[\"test\"][0][\"summary\"]\n",
    "pipe = pipeline(\"summarization\", model=\"transformersbook/pegasus-samsum\")\n",
    "\n",
    "print(\"Dialogue:\")\n",
    "print(sample_text)\n",
    "print(\"\\nReference Summary:\")\n",
    "print(reference)\n",
    "print(\"\\nModel Summary:\")\n",
    "print(pipe(sample_text, **gen_kwargs)[0][\"summary_text\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Thom, Lewis and Leandro are going to write a book about transformers. Thom\n",
      "helped build a library by Hugging Face. They are going to do it together.\n"
     ]
    }
   ],
   "source": [
    "custom_dialogue = \"\"\"\\\n",
    "Thom: Hi guys, have you heard of transformers?\n",
    "Lewis: Yes, I used them recently!\n",
    "Leandro: Indeed, there is a great library by Hugging Face.\n",
    "Thom: I know, I helped build it ;)\n",
    "Lewis: Cool, maybe we should write a book about it. What do you think?\n",
    "Leandro: Great idea, how hard can it be?!\n",
    "Thom: I am in!\n",
    "Lewis: Awesome, let's do it together!\n",
    "\"\"\"\n",
    "print(pipe(custom_dialogue, **gen_kwargs)[0][\"summary_text\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
